package controllers;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.StringTokenizer;
import javax.swing.JOptionPane;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableModel;
import models.*;
import views.*;
public class MainFrameController {
private MainFrame frame;
public MainFrameController(MainFrame frame) {
this.frame = frame;
frame.setSearchButtonActionListener(new SearchButtonActionListener());
frame.setAddButtonActionListener(new AddButtonActionListener());
frame.setRemoveKeyButtonActionListener(new RemoveKeyButtonActionListener());
frame.setRemoveDefinitionButtonActionListener(new RemoveDefinitionButtonActionListener());
frame.setDefineButtonActionListener(new DefineButtonActionListener());
frame.setPopulateButtonActionListener(new PopulateButtonActionListener());
frame.setUpdateButtonActionListener(new UpdateButtonActionListener());
}
public class SearchButtonActionListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
frame.constructTable1(Dictionary.getInstance().search(frame.getSearch().getText()));
frame.getTable1().getSelectionModel().addListSelectionListener(new Table1Listener());
}
}
public class Table1Listener implements ListSelectionListener {
@Override
public void valueChanged(ListSelectionEvent e) {
int index = frame.getTable1().getSelectedRow();
if (index != -1) {
String selectedData = (String) frame.getTable1().getValueAt(frame.getTable1().getSelectedRow(), 0);
frame.constructTable2(new Word(selectedData, false));
}
}
}
public class AddButtonActionListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
String w = frame.getSearch().getText();
if (frame.getTable1() == null)
frame.constructTable1(Dictionary.getInstance().search(frame.getSearch().getText()));
try {
Dictionary.getInstance().add(new Word(w, false), false);
DefaultTableModel model = (DefaultTableModel) frame.getTable1().getModel();
model.addRow(new Object[] { w });
for (int i = model.getRowCount() - 1; i >= 0; --i) {
if (model.getValueAt(i, 0).equals(w)) {
frame.getTable1().setRowSelectionInterval(i, i);
}
}
frame.getDefine().doClick();
} catch (IllegalOperationException e1) {
e1.printStackTrace();
}
}
}
public class DefineButtonActionListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
if (frame.getTable1() != null) {
int index = frame.getTable1().getSelectedRow();
if (index != -1) {
if (frame.getTable2() == null)
frame.constructTable2(new Word(
(String) frame.getTable1().getValueAt(frame.getTable1().getSelectedRow(), 0), false));
Object[] options = { "Word", "Phrase" };
int choice = JOptionPane.showOptionDialog(null, "What type of dictionary entry do you want?",
"Choose an option", JOptionPane.YES_NO_OPTION, JOptionPane.INFORMATION_MESSAGE, null,
options, options[0]);
if (choice == 0) {
String word = JOptionPane.showInputDialog("Please enter your word");
try {
Dictionary.getInstance().define(
new Word((String) frame.getTable1().getValueAt(index, 0), false),
new Word(word, false), false);
((DefaultTableModel) frame.getTable2().getModel()).addRow(new Object[] { word });
} catch (HeadlessException e1) {
e1.printStackTrace();
} catch (IllegalOperationException e1) {
e1.printStackTrace();
}
} else {
Phrase p = new Phrase();
int i, nrOfWords = Integer.parseInt(
JOptionPane.showInputDialog("How many words would you like the phrase to have?"));
for (i = 0; i < nrOfWords; i++) {
int prep = JOptionPane.showOptionDialog(null,
"Is word no. " + (i + 1) + " a preposition or not?", null,
JOptionPane.YES_NO_OPTION, JOptionPane.INFORMATION_MESSAGE, null, null, null);
p.add(new Word(JOptionPane.showInputDialog("Please enter your word"),
prep == 0 ? true : false));
}
try {
Dictionary.getInstance()
.define(new Word((String) frame.getTable1().getValueAt(index, 0), false), p, false);
((DefaultTableModel) frame.getTable2().getModel()).addRow(new Object[] { p.toString() });
} catch (IllegalOperationException e1) {
e1.printStackTrace();
}
}
}
}
}
}
public class RemoveKeyButtonActionListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
if (frame.getTable1() != null) {
int index = frame.getTable1().getSelectedRow();
if (index != -1)
try {
Dictionary.getInstance()
.removeKey(new Word((String) frame.getTable1().getValueAt(index, 0), false), false);
((DefaultTableModel) frame.getTable1().getModel()).removeRow(index);
} catch (IllegalOperationException e1) {
e1.printStackTrace();
}
}
}
}
public class RemoveDefinitionButtonActionListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
if (frame.getTable2() != null) {
int index = frame.getTable2().getSelectedRow();
if (index != -1) {
DictionaryEntry definition = null;
String value = (String) frame.getTable2().getValueAt(index, 0);
if (value.contains(" ")) {
definition = new Phrase();
StringTokenizer st = new StringTokenizer(value);
while (st.hasMoreTokens()) {
String prep = st.nextToken();
if (Dictionary.getInstance().checkIfPreposition(new Word(prep, true))) {
((Phrase) definition).add(new Word(prep, true));
} else {
((Phrase) definition).add(new Word(prep, false));
}
}
} else
definition = new Word(value, false);
try {
Dictionary.getInstance()
.removeDefinition(
new Word((String) frame.getTable1()
.getValueAt(frame.getTable1().getSelectedRow(), 0), false),
definition, false);
((DefaultTableModel) frame.getTable2().getModel()).removeRow(index);
} catch (IllegalOperationException e1) {
e1.printStackTrace();
}
}
}
}
}
public class UpdateButtonActionListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
if (frame.getTable1() != null) {
int index = frame.getTable1().getSelectedRow();
if (index != -1){
String update = frame.getSearch().getText();
Word w = new Word((String) frame.getTable1().getValueAt(index, 0), false);
w.addObserver(Dictionary.getInstance());
w.update(update);
((DefaultTableModel) frame.getTable1().getModel()).removeRow(index);
((DefaultTableModel) frame.getTable1().getModel()).addRow(new Object[] { update });
}
}
}
}
public class PopulateButtonActionListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
new PopulateController(new PopulateFrame("Populate"));
}
}
}